home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 1
/
Gekikoh Dennoh Club Vol. 1 (Japan).7z
/
Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin
/
tools
/
pcd2
/
src
/
pcd_ga.has
< prev
next >
Wrap
Text File
|
1997-02-06
|
6KB
|
287 lines
**************************************************
* TS-6BGA対応部分
*
* 著作権はFa.Tom氏と同じく可能な限り放棄
* 改造等は、貴方の良心に従って下さい
* 実行形式・ソース共、利用に制限はありませんが
* 無保証であることだけは保証します
* by まる丸 1997
**************************************************
.include doscall.mac
.include iocscall.mac
.include c:\free\agiocs\agiocs.mac
.xref X1391,X1865,X441,X949,X2271
.xref PCD_WORK,PCD_WORK_Y,PCD_WORK_RGB,FLG_WP,V_FLAME
.xdef YCC2FUL,GA_INIT,GA_DISP,GA_wipe,V_XY
* in d0.w=File Handle
* in a1.l=dec work ptr
* in a2.l=Graph work ptr 2
.offset 0
READ_BYTE .ds.w 1 * XSIZE*3 読み込みバイト数
OSET_Y1 .ds.w 1 * XSIZE*4 2ライン目のYデータオフセット
XlpCOUNT .ds.w 1 * XSIZE/2-1 or XSIZE/6-1 Xループカウンタ値
YlpCOUNT .ds.w 1 * YSIZE/2-1 Yループカウンタ値
CCDEC_COUNT .ds.w 1 * XSIZE/2-1
YDAT_COUNT .ds.w 1 * XSIZE*2-1 Yデータ展開カウンタ値
LINE_OSET1 .ds.w 1 * 1ラインのバイト数
LINE_OSET2 .ds.w 1 * 2ラインのバイト数
YFDEC macro regA,regB
move.l (regA)+,d0
move.l d0,d1
move.l d0,d2
add.l d3,d0
add.l d4,d1
add.l d5,d2
tst.l d1
bpl @f
moveq.l #0,d1
bra 4f
@@: cmp.l d6,d1
blt 3f
moveq.l #$ff,d1
bra 4f
3: lsr.l #2,d1
4: tst.l d2
bpl @f
clr.b d1
bra 4f
@@: cmp.l d6,d2
blt 3f
move.b #$ff,d1
bra 4f
3: lsl.l #6,d2
swap d2
move.b d2,d1
4: move.w d1,(regB)+
tst.l d0
bpl @f
clr.w (regB)+
bra 4f
@@: cmp.l d6,d0
blt 3f
move.w #$00ff,(regB)+
bra 4f
3: lsl.l #6,d0
swap d0
move.w d0,(regB)+
4:
.endm
*------------------------------
* フォトYCC→フルカラー変換
* フルサイズ展開,表示
*------------------------------
.text
.cpu 68000
.align 4
YCC2FUL:
movem.l d1-d7/a0-a6,-(sp)
move.l #$3fc00,d6 *$ffを10bit左へずらした数値
move.l a1,(DEC_WK)
move.l a1,a3
move.w (READ_BYTE,a3),-(sp)
clr.w -(sp)
pea PCD_WORK
move.w d0,-(sp) * DOS _READのスタック設定完了
move.w (YlpCOUNT,a3),d7 * Y方向ループカウンタ
2: DOS _READ *
cmp.w (READ_BYTE,a3),d0 * DOS _READにミスしたか?
bne READ_ERR_BREAK *
swap d7
move.w (YDAT_COUNT,a3),d7 * 2ライン分
lea.l (PCD_WORK),a0 *
lea.l (PCD_WORK_Y),a1
lea.l (X1391),a2
@@: moveq.l #0,d0
move.b (a0)+,d0
add.w d0,d0
add.w d0,d0
move.l (a2,d0.w),(a1)+
dbra d7,@b
lea.l (a0),a1 * (a0)=Cb
move.w (CCDEC_COUNT,a3),d7 * CCデコードカウンタ値
add.w d7,a1
addq.w #1,a1 * (a1)=Cr
lea.l (X1865),a2
lea.l (X441),a3
lea.l (X949),a4
lea.l (X2271),a5
lea.l (PCD_WORK_RGB),a6
@@: moveq.l #0,d0
move.b (a1)+,d0
add.w d0,d0
add.w d0,d0
move.l (a2,d0.w),(a6)+
move.l (a4,d0.w),d1
moveq.l #0,d0
move.b (a0)+,d0
add.w d0,d0
add.w d0,d0
add.l (a3,d0.w),d1
move.l d1,(a6)+
move.l (a5,d0.w),(a6)+
dbra d7,@b
move.l (DEC_WK),a3
move.l V_XY,d2
AGIOCS _A_G_GETFRM
move.l a1,a6
move.l d0,-(sp)
move.l a1,a4
lea.l NextLine,a5
lea.l (PCD_WORK_Y),a0
move.w (OSET_Y1,a3),a1
adda.l a0,a1
lea.l (PCD_WORK_RGB),a2
move.w (XlpCOUNT,a3),d7
1: move.l (a2)+,d3
move.l (a2)+,d4
move.l (a2)+,d5
YFDEC a0,a4
YFDEC a0,a4
YFDEC a1,a5
YFDEC a1,a5
dbra d7,1b
move.l a6,a1
move.l (sp)+,d2
AGIOCS _A_G_SETFRM
addq.l #1,V_XY
move.l V_XY,d2
AGIOCS _A_G_GETFRM
move.l d0,d2
move.l a1,a5
lea.l NextLine,a4
move.w (XlpCOUNT,a3),d7
@@: move.w (a4)+,(a5)+
move.w (a4)+,(a5)+
move.w (a4)+,(a5)+
move.w (a4)+,(a5)+
dbra d7,@b
AGIOCS _A_G_SETFRM
addq.l #1,V_XY
swap d7
dbra d7,2b
lea.l (10,sp),sp
moveq.l #0,d0
movem.l (sp)+,d1-d7/a0-a6
rts
*------------------------------
* 読み込みエラー
*------------------------------
READ_ERR_BREAK:
lea.l (10,sp),sp
moveq.l #-1,d0
movem.l (sp)+,d1-d7/a0-a6
rts
*------------------------------
* TS-6GBA及びAGIOCSの初期化
* リターン -1 エラー
* 1 TS-6BGA表示中
* 0 本体V-RAM表示中
*------------------------------
GA_INIT:
movem.l d1-d4/a1,-(sp)
suba.l a1,a1
IOCS _B_SUPER
move.l d0,a1
bsr agiocs_chek *agiocsは常駐しているか
tst.l d0
bne GA_ERR
move.w #1,-(sp) *TS-6BGAが
pea.l $e9e3c2 *装着されているか
pea.l $e9e3c2 *チェック
DOS _BUS_ERR *
lea.l 10(sp),sp *
tst.l d0 *
bne GA_ERR
move.b $e9e211,d0 *表示状態チェック
andi.b #$40,d0 *
rol.b #2,d0 *
exg d0,d4
AGIOCS _A_INIT *AGIOCSの初期化
tst.l d0
bne GA_ERR
move.l #_A_FRAME_TYPE_TS6BGA,d2
AGIOCS _A_FRAME *フレームハンドルの設定
tst.l d0
bne GA_ERR
AGIOCS _A_P_INIT
AGIOCS _A_G_INIT
move.l #$03000200,d2 *画面サイズ768X512
move.l #_A_COLFMT_TS6BGA_24B,d3 *色フォーマット
AGIOCS _A_MODE
moveq.l #0,d2
move.l #03000200,d3
AGIOCS _A_G_CLIP *クリッピングエリア設定
moveq.l #1,d0
bsr GA_DISP
bra @f
GA_ERR: move.l #-1,d4
@@: IOCS _B_SUPER
exg d0,d4
movem.l (sp)+,d1-d4/a1
rts
*------------------------------
* AGIOCSの常駐チェック
*------------------------------
agiocs_chek:
movem.l d1/a0-a1,-(sp)
move.w #$100+$f9,-(sp) * IOCS $F9
DOS _INTVCG
addq.l #2,sp
subq.l #8,d0
move.l d0,a0
lea.l ag_tit,a1
moveq.l #7,d1
move.l #-1,d0
@@: cmp.b (a0)+,(a1)+
bne @f
dbra d1,@b
clr.l d0
@@: movem.l (sp)+,d1/a0-a1
rts
*------------------------------
* TS-6BGAの表示切り替え
*------------------------------
GA_DISP:
movem.l d1-d2,-(sp)
move.l d0,d2
AGIOCS _A_G_DISP
movem.l (sp)+,d1-d2
rts
*------------------------------
* 画面消去
*------------------------------
GA_wipe:
tst.l V_FLAME
bmi @f
movem.l d0-d2/a1,-(sp)
moveq.l #0,d2
lea.l wi_dt,a1
AGIOCS _A_G_WIPE
movem.l (sp)+,d0-d2/a1
@@: rts
*------------------------------
* 固定データ
*------------------------------
.data
.align 4
wi_dt: .dc.l 0
ag_tit: .dc.b '*AGIOCS*',0
*------------------------------
* ワークエリア
*------------------------------
.bss
.align 4
DEC_WK: .ds.l 1
V_XY: .ds.l 1
NextLine: .ds.l 768